package com.newx.test.handler;

import com.newx.file.handler.NewxFileException;
import com.newx.limit.handler.exeption.NewxLimitException;
import com.newx.test.util.R;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

import javax.servlet.http.HttpServletRequest;
/**
 * RestControllerAdvice = ControllerAdvice + ResponseBody
 * 是controller的增强器,可以全局捕获spring mvc抛的异常
 */
@RestControllerAdvice
/**
 * 优雅异常处理程序
 * 统一拦截处理
 * 在该类中，可以定义多个方法，不同的方法处理不同的异常
 */
public class GlobalExceptionHandler {


    /*************************SpringBoot常见异常*************************/


    /**
     * 处理NewxLimitException接口限流异常
     * @param e
     * @return
     */
    @ExceptionHandler({NewxLimitException.class})
    public R bindExceptionHandler(NewxLimitException e) {
        e.printStackTrace();
        //ObjectError objectError = e.getMessage()e.getBindingResult().getAllErrors().get(0);
        return R.error().message(e.getMessage());
    }

    /**
     * 处理NewxFileException异常
     * @param e
     * @return
     */
    @ExceptionHandler({NewxFileException.class})
    public R newxFileExceptionHandler(NewxFileException e) {
        e.printStackTrace();
        //ObjectError objectError = e.getMessage()e.getBindingResult().getAllErrors().get(0);
        return R.error().message(e.getMessage());
    }

    /**
     * 处理NewxFileException异常
     * @param e
     * @return
     */
    @ExceptionHandler({Exception.class})
    public R exceptionHandler(Exception e) {
        e.printStackTrace();
        //ObjectError objectError = e.getMessage()e.getBindingResult().getAllErrors().get(0);
        return R.error().message(e.getMessage());
    }

}
